#include"Stack.h"
void ListCapacity(Stack*ps)
{
    if(ps->top==ps->capacity)
    {
        int newcapacity=ps->capacity==0?4:ps->capacity*2;

        STDataType*ptr=(STDataType*)realloc(ps->data,sizeof(STDataType)*newcapacity);
        if(ptr==NULL)
        {
            perror("ptr:");
            exit(-1);
        }
        ps->capacity=newcapacity;
        ps->data=ptr;
    }
}
void StackInit(Stack* ps)
{
    ps->data=NULL;
    ps->capacity=0;
    ps->top=0;
}
void StackPush(Stack* ps, STDataType data)//入栈
{
    ListCapacity(ps);
    ps->data[ps->top]=data;
    ps->top++;

}

void StackPop(Stack* ps)// 出栈
{
    assert(!StackEmpty(ps));
    ps->top--;
}

// 获取栈顶元素
STDataType StackTop(Stack* ps)
{
    return ps->data[ps->top];
}
// 获取栈中有效元素个数
int StackSize(Stack* ps)
{
    return ps->top;
}

int StackEmpty(Stack* ps)// 检测栈是否为空，如果为空返回非零结果，如果不为空返回0
{
    return ps->top==0;
}

// 销毁栈
void StackDestroy(Stack* ps)
{
    free(ps->data);
    ps->data=NULL;
    ps->top=0;
    ps->capacity=0;
}